import { Toast } from 'antd-mobile'
import axios from 'axios'
import history from './history'
import { getTokenInfo } from './storage'
const baseURL = 'http://toutiao.itheima.net/v1_0'

// 1. 创建新的 axios 实例
const instance = axios.create({
  baseURL,
})

// 2. 设置请求拦截器和响应拦截器
instance.interceptors.request.use((config) => {
  const token = getTokenInfo().token
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  // console.log(getTokenInfo())
  // console.log(config)
  // console.log('token', token)
  return config
})

instance.interceptors.response.use(
  (response) => {
    return response
  },
  async (err) => {
    // 如果因为网络原因，response没有 给提示消息
    if (!err.response) {
      Toast.show('网络繁忙，请稍后重试')
      return Promise.reject(err)
    }
    // 网络没问题 ，后台返回了数据
    const { response } = err
    if (response.status !== '401') {
      // 不是token失效的问题
      Toast.show(response.data.message)
      return Promise.reject(err)
    }
    // 网路没问题 且是401token失效问题
    // 1判断 有咩有刷新token
    const { refresh_token } = getTokenInfo()
    if (!refresh_token) {
      history.push({
        pathname: '/home',
        state: {
          from: history.location.pathname,
        },
      })
      return Promise.reject(err)
    }
    // 是401错误且有 刷新token 刷新token
    // 尝试发请求获取新的token 注意 刷新token发送请求 不能使用封装的instance
    const res = await axios({
      method: 'put',
      url: baseURL + '/authorizations',
      herders: {
        Authorization: 'Bearer ' + refresh_token,
      },
    })
    console.log(res)
  }
)

// 3. 导出该 axios 实例
export default instance
